package com.jl15988.mybatispluskit.join.enums;

/**
 * 关联查询 SQL 方法枚举
 * 参考 MyBatis-Plus 官方 SqlMethod 设计
 *
 * @author Jalon
 * @since 2025/1/1
 */
public enum JoinSqlMethod {

    /**
     * 关联查询列表
     */
    SELECT_JOIN_LIST("selectJoinList", "关联查询列表", "<script>\nSELECT %s\nFROM %s %s\n%s\n%s\n</script>"),

    /**
     * Lambda 关联查询列表
     */
    SELECT_JOIN_LAMBDA_LIST("selectJoinLambdaList", "Lambda 关联查询列表", "<script>\nSELECT %s\nFROM %s %s\n%s\n%s\n</script>"),

    /**
     * 关联查询单条记录
     */
    SELECT_JOIN_ONE("selectJoinOne", "关联查询单条记录", "<script>\nSELECT %s\nFROM %s %s\n%s\n%s\nLIMIT 1\n</script>"),

    /**
     * Lambda 关联查询单条记录
     */
    SELECT_JOIN_LAMBDA_ONE("selectJoinLambdaOne", "Lambda 关联查询单条记录", "<script>\nSELECT %s\nFROM %s %s\n%s\n%s\nLIMIT 1\n</script>"),

    /**
     * 关联查询记录数
     */
    SELECT_JOIN_COUNT("selectJoinCount", "关联查询记录数", "<script>\nSELECT COUNT(*)\nFROM %s %s\n%s\n%s\n</script>"),

    /**
     * Lambda 关联查询记录数
     */
    SELECT_JOIN_LAMBDA_COUNT("selectJoinLambdaCount", "Lambda 关联查询记录数", "<script>\nSELECT COUNT(*)\nFROM %s %s\n%s\n%s\n</script>"),

    /**
     * 关联查询 Map 列表
     */
    SELECT_JOIN_MAPS("selectJoinMaps", "关联查询 Map 列表", "<script>\nSELECT %s\nFROM %s %s\n%s\n%s\n</script>"),

    /**
     * Lambda 关联查询 Map 列表
     */
    SELECT_JOIN_LAMBDA_MAPS("selectJoinLambdaMaps", "Lambda 关联查询 Map 列表", "<script>\nSELECT %s\nFROM %s %s\n%s\n%s\n</script>");

    /**
     * 方法名
     */
    private final String method;

    /**
     * 方法描述
     */
    private final String desc;

    /**
     * SQL 模板
     */
    private final String sql;

    /**
     * 构造函数
     *
     * @param method 方法名
     * @param desc   方法描述
     * @param sql    SQL 模板
     */
    JoinSqlMethod(String method, String desc, String sql) {
        this.method = method;
        this.desc = desc;
        this.sql = sql;
    }

    /**
     * 获取方法名
     *
     * @return 方法名
     */
    public String getMethod() {
        return method;
    }

    /**
     * 获取方法描述
     *
     * @return 方法描述
     */
    public String getDesc() {
        return desc;
    }

    /**
     * 获取 SQL 模板
     *
     * @return SQL 模板
     */
    public String getSql() {
        return sql;
    }
} 